package com.analyst.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

// Java调用Python脚本的工具类
public class PythonUtil {

    // Python脚本的路径和名称
    private static final String PYTHON_PATH = "src/main/resources/py/";

    // 调用Python脚本的方法，输入参数为一个字符串数组，输出结果为一个字符串
    public static String callPython(String file, String[] args) {

        StringBuilder result = new StringBuilder(); // 用于存储输出结果
        Process proc = null; // 用于执行Python脚本的进程
        BufferedReader in = null; // 用于读取Python脚本的输出
        BufferedReader err=null;
        try {
            System.out.println(file);
            proc = Runtime.getRuntime().exec("python "+ PYTHON_PATH+file+" " + String.join(" ", args));
// 获取进程的输入流和错误流
            in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
// 读取输入流和错误流的内容，打印到控制台
            String line = null;
            while ((line = in.readLine()) != null) {
                result.append(line);
                result.append("\n");
            }
            while ((line = err.readLine()) != null) {
                System.err.println(line);
            }
// 等待进程结束
            proc.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭输入流和输出流
                if (in != null) in.close();

                if (err != null) err.close();

            }catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result.toString();
    }
    public static void main(String[] args) {
        // 定义要传递给Python脚本的参数数组，这里是两个数字"3"和"5"
        String[] params = new String[]{"3", "5"};
        // 调用PythonUtil类中的callPython方法，传入Python脚本的文件名和参数数组，获取输出结果
        String output = PythonUtil.callPython("main.py", params);
        // 打印输出结果到控制台
        System.out.println(output);
    }
}
